/**
 * 
 * @param {Object} [oldValue] old value
 * @param {Object} [newValue] new value
 * @param {JSEvent} [event] the event that triggered the action
 * 
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"48B722E4-271B-491D-AF61-94BF48EBBB99"}
 */
function elige_producto(oldValue, newValue, event)
{
	if (newValue == null)
	{
		precio_unitario = null
		total_renglon 	= null
		iva_porc 		= null
		descuento_porc 	= null
		cantidad_dec 	= null
		return true
	}
	
	if (forms.fac_mayo.cliente_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar cliente','OK')
		forms.fac_mayo.elements.fld_cliente_id.requestFocus()
		return true;
	}
	
	if (fac_detalle_to_productos.tipo_descripcion == 2)
	{
		cantidad_dec 		= null
		precio_unitario 	= null
		descuento_importe 	= null
		descuento_porc 		= null
		iva_porc 			= null
		total_renglon 		= null
		elements.fld_texto.requestFocus()
		return true
	}
	
	if (rem_detalle_id != null)  // No viene de REMITO
	{
		globals.DIALOGS.showWarningDialog('Aviso','Este producto proviene de un remito. No puede cambiarlo','OK')
		producto_id = oldValue
		return true
	}
	if (ped_detalle_id != null)  // No viene de REMITO
	{
		globals.DIALOGS.showWarningDialog('Aviso','Este producto proviene de un pedido. No puede cambiarlo','OK')
		producto_id = oldValue
		return true
	}
	if (!validarTipoProducto())
	{
		globals.DIALOGS.showWarningDialog('Aviso','Este producto no es del mismo tipo que la factura','OK')
		producto_id = oldValue
		return true
	}
	if (fac_detalle_to_productos.origen == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Este producto no tiene definido su origen','OK')
		producto_id = oldValue
		return true
	}
	precio_unitario = fac_detalle_to_productos.productos_to_monedas.cotizacion * fac_detalle_to_productos.precio_unitario
	descuento_porc	= fac_detalle_to_productos.descuento; 
	
	if (!recalcula_precio())
	{
		precio_unitario = null
		total_renglon 	= null
		iva_porc 		= null
		descuento_porc 	= null
		cantidad_dec 	= null
		return false
	}
	texto = fac_detalle_to_productos.descripcion
	elements.cantidad.requestFocus();
	return true 
}

/**
 * @properties={typeid:24,uuid:"763A5A60-C922-4DD5-8C64-EA5903537B1F"}
 */
function validarTipoProducto()
{
	var $sql = 'SELECT fac_conceptos_productos_id FROM fac_conceptos_productos WHERE fac_concepto_id = ? AND tipo_producto = ?'
	var $args = [forms.fac_mayo.fac_concepto_id, fac_detalle_to_productos.tipo]
	var $ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,-1)
	if ($ds.getMaxRowIndex() == 0)
	{
		return false
	}
	return true
}

/**
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"8F5BCFF7-FB59-48CD-802D-9BB81DE9F6A6"}
 */
function recalcula_total_renglon() 
{
	var $iva_coef = calculaCoeficienteIva()
	if ($iva_coef == -1)
		return false
	total_renglon = utils.stringToNumber(utils.numberFormat($iva_coef * (utils.stringToNumber(utils.numberFormat(precio_unitario * cantidad_dec, 2)) - descuento_importe),2))
	forms.fac_mayo.totalizar()
	return true
}

/**
 * @properties={typeid:24,uuid:"B820CF0F-F53A-4823-8D2C-F0322AD61C4F"}
 */
function calculaCoeficienteIva() {
	var $multi = 1
	if (!forms.fac_mayo.fac_cabecera_to_clientes.clientes_to_relacion_iva_letra)
	{
		globals.DIALOGS.showWarningDialog('Aviso','El cliente no tiene definida la tasa de iva','OK')
		return -1
	}
	if (forms.fac_mayo.fac_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_calcula == 1)
	{ //  DISCRIMINA
		if (!fac_detalle_to_productos.productos_to_tasa_iva)
		{
			globals.DIALOGS.showWarningDialog('Aviso','El producto no tiene definida la tasa de iva','OK')
			return -1
		}
		iva_porc = fac_detalle_to_productos.productos_to_tasa_iva.tasa_iva_porc
		if (forms.fac_mayo.fac_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_discrimina == 1)
		{
			$multi = 1;  // es A
		}
		else  // es B 
			$multi = 1 + iva_porc / 100
	}
	else
	{ //NO CALCULA IVA
		iva_porc 	= 0
		$multi 		= 1;
	}
	return $multi
}

/**
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C752D6F1-C559-4321-9ED3-5878AE4071E6"}
 */
function recalcula_precio() 
{  // rever el calculo del renglon
	descuento_importe	= precio_unitario * cantidad_dec * (descuento_porc / 100);
	return recalcula_total_renglon()
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"9DD26B04-2402-4544-96C2-063DF17C780E"}
 */
function onDataChange_cantidad(oldValue, newValue, event)
{
	if (fac_detalle_to_productos.tipo_descripcion == 2)
	{
		cantidad_dec = null
		return true
	}
	if (ped_detalle_id)
	{
		var $tolerancia = fac_detalle_to_ped_detalle.cantidad_pendiente_entrega * (1 + globals.zparam_tolerancia_cambio_cantidad / 100)
		if (newValue > $tolerancia)
		{
			globals.DIALOGS.showWarningDialog('Aviso','La cantidad excede a la cantidad permitida')
			cantidad_dec = oldValue
			return true
		}
	}
	if (rem_detalle_id)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No puede cambiar la cantidad del remito','OK')
		cantidad_dec = oldValue
		return true
	}
	marca_cambio_cantidad = 1
	recalcula_precio()
	if (precio_unitario)
	{
		if (fac_detalle_to_productos.tipo_descripcion == 0){
			forms.fac_mayo.fac_cabecera_to_fac_detalle.newRecord(false)
			elements.fld_producto_id.requestFocus()
		}
		else
		{
			elements.fld_texto.requestFocus()
			elements.fld_texto.caretPosition = texto.length
		}
	}
	else
		elements.fld_precio_unitario.requestFocus()
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"11886E97-EB0B-409A-BB44-26AB86247DEB"}
 */
function onDataChange_precio(oldValue, newValue, event) 
{
	descuento_importe	= precio_unitario * (descuento_porc / 100);
	recalcula_total_renglon();
	if (!oldValue)
	{
		forms.fac_mayo.fac_cabecera_to_fac_detalle.newRecord(false)
		elements.fld_producto_id.requestFocus()
	}
	return true;
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"06BC1B75-9562-41BE-92EA-97A13F86B2F2"}
 */
function onDataChange_descuento(oldValue, newValue, event) 
{
	if (rem_detalle_id)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No puede cambiar el descuento del remito','OK')
		descuento_porc = oldValue
		return true
	}
	//  DESCUENTO TOPE PERMITIDO
	if (globals.descuento_permitido(descuento_porc) == false)	
	{
		descuento_porc = oldValue;
		return true;  
	}
	recalcula_precio()
	return true;
}

/**
 * Handle changed data.
 *
 * @param {String} oldValue old value
 * @param {String} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"490C2C4A-3800-4E04-9CBE-5BCC4BA19EA9"}
 */
function onDataChangeTexto(oldValue, newValue, event) {
	forms.fac_mayo.fac_cabecera_to_fac_detalle.newRecord(false)
	elements.fld_producto_id.requestFocus()
	return true
}
